package A.动态数组;

/**
 * 给定一个由 整数 组成的 非空 数组所表示的非负整数，在该数的基础上加一。
 *
 * 最高位数字存放在数组的首位， 数组中每个元素只存储单个数字。
 *
 * 你可以假设除了整数 0 之外，这个整数不会以零开头。
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/plus-one
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

public class _66_加一 {
    /**
     *
     * @param digits
     * @return
     */
    //需要逢10进1
    public int[] plusOne(int[] digits) {
        if (digits[digits.length-1] ==9){
               // int[] arr2=new int[digits.length+1];
                int j=digits.length-1;
                do {
                    digits[j] =0;
                    j--;
                    if (j<0){
                        break;
                    }
                }while (digits[j]==9 );

                if (j>=0){//
                    digits[j] =digits[j]+1;
                    return digits;
                }else {//首位是9 加上之后为0 首位加1
                    int[] re = new int[digits.length+1];
                    re[0] = 1;
                    for (int i=0;i<digits.length;i++){
                        re[i+1] = 0;
                    }
                    return re;

                }
        }else {
            digits[digits.length-1] +=1;
            return digits;
        }

    }

    /**
     * 简便运算 直接加一做除10判断 如果不为零就直接函数返回 否则逐渐加然后补1
     * @param digits
     * @re
     */
    public int[] plusOne1(int[] digits) {
        for (int i = digits.length - 1; i >= 0; i--) {
            digits[i]++;
            digits[i] = digits[i] % 10;
            if (digits[i] != 0) return digits;
        }
        digits = new int[digits.length + 1];
        digits[0] = 1;
        return digits;
    }





}
